package xyz.xmh.pattern.creational.prototypepattern;

/**
 * Shape 形状<br/>
 * 实现了cloneable接口的抽象类<br/>
 * 与通过对一个类进行实例化来构造新对象不同的是，原型模式是通过拷贝一个现有对象生成新对象的。<br/>
 * 浅拷贝实现 Cloneable，重写clone方法
 *
 * @author xuMingHai
 * @since 2021/4/29 星期四 16:30
 */
public abstract class Shape implements Cloneable {

    protected String type;
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    /**
     * 打印具体对象的信息
     */
    abstract void draw();

    /**
     * 重写Object的clone方法
     *
     * @return 克隆对象
     */
    @Override
    public Object clone() {
        Object cloned = null;
        try {
            cloned = super.clone();
        }
        catch (CloneNotSupportedException ignored) {
        }
        return cloned;
    }

}
